home *** CD-ROM | disk | FTP | other *** search
Wrap
function SurfCanyonMisc() { } SurfCanyonMisc.prototype.log = function(text) { Components.classes["@mozilla.org/consoleservice;1"]. getService(Components.interfaces.nsIConsoleService). logStringMessage(text); } SurfCanyonMisc.prototype.updateWebOfTrust = function(node) { if (typeof(wot_search) == "object" && typeof(wot_search.process) == "function") { wot_search.process(node); } } SurfCanyonMisc.prototype.addToSearchBar = function(name, openSearchUrl) { var searchService = Components.classes["@mozilla.org/browser/search-service;1"].getService().QueryInterface(Components.interfaces.nsIBrowserSearchService); if (searchService.getEngineByName(name) == null) { searchService.addEngine(openSearchUrl, Components.interfaces.nsISearchEngine.DATA_XML, null, false); } } SurfCanyonMisc.prototype.openNewTab = function(url) { var watcher = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService().QueryInterface(Components.interfaces.nsIWindowWatcher); var list = watcher.getWindowEnumerator(); while (list.hasMoreElements()) { var w = list.getNext().QueryInterface(Components.interfaces.nsIDOMWindow); try { var win = w.QueryInterface(Components.interfaces.nsIDOMWindowInternal); if (win.location.href == "chrome://browser/content/browser.xul") { var browser = win.getBrowser(); browser.selectedTab = browser.addTab(url); return; } } catch(e) { } } } function getSurfCanyonPrefsBranch() { return Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefService). getBranch("surfcanyon."); } function scNotificationBoxButtonCallback(arg) { var notificationBox = getBrowser().getNotificationBox(); notificationBox.removeAllNotifications(); var prefsBranch = getSurfCanyonPrefsBranch(); try { var notificationNum = prefsBranch.getIntPref('last_notification_displayed'); if (notificationNum == 1) { prefsBranch.setBoolPref('recs_notifications_cancelled', true); } else if (notificationNum == 2) { prefsBranch.setBoolPref('page_notifications_cancelled', true); } } catch (e) { } } SurfCanyonMisc.prototype.showNotification = function(msg, notificationNum) { var prefsBranch = getSurfCanyonPrefsBranch(); var cancelled = false; try { if (notificationNum == 1) { cancelled = prefsBranch.getBoolPref('recs_notifications_cancelled'); } else if (notificationNum == 2) { cancelled = prefsBranch.getBoolPref('page_notifications_cancelled'); } } catch (e) { } if (!cancelled) { var buttons = [{ label: "Don't show this message again", accessKey: null, popup: null, callback: scNotificationBoxButtonCallback }]; var notificationBox = getBrowser().getNotificationBox(); notificationBox.removeAllNotifications(); notificationBox.appendNotification(msg, "scMessage", null, notificationBox.PRIORITY_WARNING_HIGH, buttons); prefsBranch.setIntPref('last_notification_displayed', notificationNum); } } SurfCanyonMisc.prototype.getBoolPreferenceValue = function(key) { var val = false; try { val = getSurfCanyonPrefsBranch().getBoolPref(key); } catch (e) { } return val; } SurfCanyonMisc.prototype.setBoolPreferenceValue = function(key, value) { getSurfCanyonPrefsBranch().setBoolPref(key, value); } SurfCanyonMisc.prototype.getCharPreferenceValue = function(key) { var val = null; try { val = getSurfCanyonPrefsBranch().getCharPref(key); } catch (e) { } return val; } SurfCanyonMisc.prototype.setCharPreferenceValue = function(key, value) { getSurfCanyonPrefsBranch().setCharPref(key, value); } SurfCanyonMisc.prototype.getIntPreferenceValue = function(key) { var val = null; try { val = getSurfCanyonPrefsBranch().getIntPref(key); } catch (e) { } return val; } SurfCanyonMisc.prototype.setIntPreferenceValue = function(key, value) { getSurfCanyonPrefsBranch().setIntPref(key, value); } SurfCanyonMisc.prototype.optionsInit = function() { try { var elem = document.getElementById("sc.disabled"); elem.checked = !this.getBoolPreferenceValue("disabled"); elem = document.getElementById("sc.statusBarIconDisabled"); elem.checked = !this.getBoolPreferenceValue("status_bar_icon_disabled"); } catch (e) { alert(e.message); } } SurfCanyonMisc.prototype.optionsSave = function() { var changed = false; var statusBarIconWasDisabled = false; try { statusBarIconWasDisabled = this.getBoolPreferenceValue("status_bar_icon_disabled"); } catch (e1) { } var statusBarIconDisabled; try { var elem1 = document.getElementById("sc.statusBarIconDisabled"); statusBarIconDisabled = !elem1.checked; if (statusBarIconDisabled != statusBarIconWasDisabled) { this.setBoolPreferenceValue("status_bar_icon_disabled", statusBarIconDisabled); changed = true; } } catch (e2) { alert(e2.message); } var wasDisabled = false; try { wasDisabled = this.getBoolPreferenceValue("disabled"); } catch (e3) { } var disabled; try { var elem2 = document.getElementById("sc.disabled"); disabled = !elem2.checked; if (disabled != wasDisabled) { this.setBoolPreferenceValue("disabled", disabled); changed = true; } } catch (e4) { alert(e4.message); } if (changed) { try { this.updateDisabledStatusInUI(disabled, statusBarIconDisabled); // might reload page } catch (e4) { alert(e4); } } return true; } function getSCStatusNode() { var doc = (window.opener) ? window.opener.document : document; return doc.getElementById('surfcanyon-status'); } function getSCUrlBarNode() { var doc = (window.opener) ? window.opener.document : document; return doc.getElementById('surfcanyon-urlbar-main'); } SurfCanyonMisc.prototype.updateDisabledStatusInUI = function(disabled, statusBarIconDisabled) { var statusNode = getSCStatusNode(); if (statusNode) { if (statusBarIconDisabled != 'x') { statusNode.style.visibility = statusBarIconDisabled ? "collapse" : "visible"; } if (disabled != 'x') { statusNode.setAttribute("status", disabled ? "0" : "1"); window.opener._content.document.location.reload(); } } } SurfCanyonMisc.prototype.removeFromUrlBar = function() { var urlBarNode = getSCUrlBarNode(); urlBarNode.style.display = 'none'; this.setBoolPreferenceValue('url_bar_icon_disabled', true); _content.document.location.reload(); } SurfCanyonMisc.prototype.reload = function() { _content.document.location.reload(); } SurfCanyonMisc.prototype.isGooglePreviewOn = function() { return window && window.com && window.com.googlepreview && window.com.googlepreview.package && window.com.googlepreview.package.ENABLE_IMAGE_INSERT_PREF && Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefBranch). getBranch("googlepreview.").getBoolPref('insertimages'); } var surfcanyon_gmCompiler={ observe: function(p_Subject, p_Topic, p_Data) { if (p_Data == "item-uninstalled") { p_Subject.QueryInterface(Components.interfaces.nsIUpdateItem); if (p_Subject.id == "{75623d5d-4683-402a-b610-ac4bab767c86}") { try { var searchService = Components.classes["@mozilla.org/browser/search-service;1"].getService().QueryInterface(Components.interfaces.nsIBrowserSearchService); var engine = searchService.getEngineByName('Surf Canyon'); if (engine) { searchService.removeEngine(engine); } } catch (e1) { } var url = "http://www.surfcanyon.com/search/uninstall.jsp"; try { var prefsBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getBranch("surfcanyon."); var partnerCode = prefsBranch.getCharPref("partner_code"); if (partnerCode && (partnerCode.toLowerCase() != 'oneriot')) { url = url + "?instId=" + partnerCode + prefsBranch.getCharPref("inst_id"); } else { url = null; } } catch (e2) { } if (url) { getBrowser().addTab(url); } } } }, activateMonitor: function() { var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); observerService.addObserver(this, "em-action-requested", false); }, deactivateMonitor: function() { var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); observerService.removeObserver(this, "em-action-requested"); }, getUrlContents: function(aUrl){ // getUrlContents adapted from Greasemonkey Compiler // http://www.letitblog.com/code/python/greasemonkey.py.txt // used under GPL permission // // most everything else below based heavily off of Greasemonkey // http://greasemonkey.mozdev.org/ // used under GPL permission var ioService=Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var scriptableStream=Components .classes["@mozilla.org/scriptableinputstream;1"] .getService(Components.interfaces.nsIScriptableInputStream); var channel=ioService.newChannel(aUrl, null, null); var input=channel.open(); scriptableStream.init(input); var str=scriptableStream.read(input.available()); scriptableStream.close(); input.close(); return str; }, contentLoad: function(e) { if ((typeof autopagerMain != 'undefined') && autopagerMain && autopagerMain.isAutoPagerHiddenWindow && autopagerMain.isAutoPagerHiddenWindow(e.target)) { return; } var unsafeWin=e.target.defaultView; if (unsafeWin.wrappedJSObject) unsafeWin=unsafeWin.wrappedJSObject; var unsafeLoc=new XPCNativeWrapper(unsafeWin, "location").location; var href=new XPCNativeWrapper(unsafeLoc, "href").href; if (/^http:/.test(href)) { var prefsBranch = getSurfCanyonPrefsBranch(); try { var statusNode = getSCStatusNode(); if (statusNode) { var disabled; try { disabled = prefsBranch.getBoolPref('disabled'); } catch (e1) { } var statusBarIconDisabled; try { statusBarIconDisabled = prefsBranch.getBoolPref('status_bar_icon_disabled'); } catch (e2) { } statusNode.style.visibility = statusBarIconDisabled ? "collapse" : "visible"; statusNode.setAttribute('status', (disabled ? '0' : '1')); } } catch (e3) { } try { var urlBarNode = getSCUrlBarNode(); var urlBarIconDisabled; try { urlBarIconDisabled = prefsBranch.getBoolPref('url_bar_icon_disabled'); } catch (e4) { } urlBarNode.style.display = urlBarIconDisabled ? 'none' : 'block'; } catch (e5) { } var script=surfcanyon_gmCompiler.getUrlContents('chrome://surfcanyon/content/surfcanyon.js'); // script += "\n\n"+surfcanyon_gmCompiler.getUrlContents('chrome://surfcanyon/content/jquery.js'); surfcanyon_gmCompiler.injectScript(script, href, unsafeWin); } }, injectScript: function(script, url, unsafeContentWin) { var safeWin=new XPCNativeWrapper(unsafeContentWin); var sandbox=new Components.utils.Sandbox(safeWin); sandbox.window=safeWin; sandbox.document=sandbox.window.document; sandbox.unsafeWindow=unsafeContentWin; // patch missing properties on xpcnw sandbox.XPathResult=Components.interfaces.nsIDOMXPathResult; var xhr=new surfcanyon_xmlhttpRequester(unsafeContentWin, window); // add our own APIs var scMisc = new SurfCanyonMisc(); sandbox.ajax=surfcanyon_gmCompiler.hitch(xhr, "contentStartRequest"); sandbox.log=surfcanyon_gmCompiler.hitch(scMisc, "log"); sandbox.updateWebOfTrust=surfcanyon_gmCompiler.hitch(scMisc, "updateWebOfTrust"); sandbox.addToSearchBar=surfcanyon_gmCompiler.hitch(scMisc, "addToSearchBar"); sandbox.openNewTab=surfcanyon_gmCompiler.hitch(scMisc, "openNewTab"); sandbox.showNotification=surfcanyon_gmCompiler.hitch(scMisc, "showNotification"); sandbox.getIntPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "getIntPreferenceValue"); sandbox.getBoolPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "getBoolPreferenceValue"); sandbox.setBoolPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "setBoolPreferenceValue"); sandbox.getCharPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "getCharPreferenceValue"); sandbox.setCharPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "setCharPreferenceValue"); sandbox.getIntPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "getIntPreferenceValue"); sandbox.setIntPreferenceValue=surfcanyon_gmCompiler.hitch(scMisc, "setIntPreferenceValue"); sandbox.updateDisabledStatusInUI=surfcanyon_gmCompiler.hitch(scMisc, "updateDisabledStatusInUI"); sandbox.reload=surfcanyon_gmCompiler.hitch(scMisc, "reload"); sandbox.isGooglePreviewOn=surfcanyon_gmCompiler.hitch(scMisc, "isGooglePreviewOn"); sandbox.__proto__=sandbox.window; try { this.evalInSandbox("(function(){"+script+"})()", url, sandbox); } catch (e) { var e2=new Error(typeof e=="string" ? e : e.message); e2.fileName=script.filename; e2.lineNumber=0; alert(e2); } }, evalInSandbox: function(code, codebase, sandbox) { if (Components.utils && Components.utils.Sandbox) { // DP beta+ Components.utils.evalInSandbox(code, sandbox); } else if (Components.utils && Components.utils.evalInSandbox) { // DP alphas Components.utils.evalInSandbox(code, codebase, sandbox); } else if (Sandbox) { // 1.0.x evalInSandbox(code, sandbox, codebase); } else { throw new Error("Could not create sandbox."); } }, hitch: function(obj, meth) { if (!obj[meth]) { throw "method '" + meth + "' does not exist on object '" + obj + "'"; } var staticArgs = Array.prototype.splice.call(arguments, 2, arguments.length); return function() { // make a copy of staticArgs (don't modify it because it gets reused for // every invocation). var args = staticArgs.concat(); // add all the new arguments for (var i = 0; i < arguments.length; i++) { args.push(arguments[i]); } // invoke the original function with the correct this obj and the combined // list of static and dynamic arguments. return obj[meth].apply(obj, args); }; }, onLoad: function() { surfcanyon_gmCompiler.activateMonitor(); var appcontent=window.document.getElementById("appcontent"); if (appcontent && !appcontent.greased_surfcanyon_gmCompiler) { appcontent.greased_surfcanyon_gmCompiler=true; appcontent.addEventListener("DOMContentLoaded", surfcanyon_gmCompiler.contentLoad, false); } }, onUnLoad: function() { surfcanyon_gmCompiler.deactivateMonitor(); window.removeEventListener('load', surfcanyon_gmCompiler.onLoad, false); window.removeEventListener('unload', surfcanyon_gmCompiler.onUnLoad, false); window.document.getElementById("appcontent") .removeEventListener("DOMContentLoaded", surfcanyon_gmCompiler.contentLoad, false); }, }; //object surfcanyon_gmCompiler window.addEventListener('load', surfcanyon_gmCompiler.onLoad, false); window.addEventListener('unload', surfcanyon_gmCompiler.onUnLoad, false);